--- %%NOBANNER%% -->
/*------------------<-- Start of Description -->--------------------\ | Sample size for two independent means; | |--------------------<-- End of Description -->---------------------| |--------------------------------------------------------------------| |--------------<-- Start of Files or Arguments Needed -->-----------| | Arguments: | | - Required: | | std = standard deviation | | y1 = true group 1 mean under null hypothesis | | min_y2 = smallest possible true group 2 mean | | - Optional: | | max_y2 = largest possible true mean for group 2 | | inc_y2 = increment value for range of y2 | | r = ratio of group 2/group 1 sample size(n2/n1),default=1 | | alpha = type 1 error, e.g. .01 or .05, default=.05 | | sides = 1 or 2 for 1 or 2 sided test, default=2 | | power = desired power, e.g. .80, .90, default=.80 | | plot = 'P' for line printer plot of group 2 sample size vs y2 | | 'G' for SAS/GRAPH plot of group 2 sample size vs y2 | | unit = units for mean, e.g. mg, lbs., cm, etc. | | Output: Sample size per group for true group 1 mean of y1 vs true | | group 2 means ranging from min_y2 to max_y2 | |---------------<-- End of Files or Arguments Needed -->------------| |--------------------------------------------------------------------| |----------------<-- Start of Example and Usage -->-----------------| | Example: %mn2_ss(alpha=.05,sides=1,y1=0,min_y2=.2,max_y2=3, | | inc_y2=.1,std=1, power=.9,unit=gals,plot=p); | | Usage: %mn2_ss(ALPHA=.05,SIDES=2,POWER=.80,Y1=.,MIN_Y2=., | | MAX_Y2=.,INC_Y2=.,R=1,STD=.,PLOT= , UNIT=); | | Reference: Bergstralh, EJ. SAS macros for sample size and power | | calculations. Proceedings of the 9th annual SAS Users | | Group International Conference. | | Equation #6. | \-------------------<-- End of Example and Usage -->---------------*/ %MACRO mn2_ss(ALPHA=.05,SIDES=2,POWER=.80,Y1=.,MIN_Y2=., MAX_Y2=.,INC_Y2=.,R=1,STD=.,PLOT= , UNIT=); /*--------------------------------------------\ | Author: Michael Riggs and Eric Bergstralh;| | Created: November 16, 1992; | | Modified: January 9, 1998; | | Purpose: Power for two independent means; | \--------------------------------------------*/ OPTIONS MISSING=' ' NOCENTER; %LET PLOT=%UPCASE(&PLOT); DATA T1; ALPHA=&ALPHA; SIDES=&SIDES; Y1=&Y1; MIN_Y2=&MIN_Y2; MAX_Y2=&MAX_Y2; INC_Y2=&INC_Y2; POWER=&POWER; R=&R; STD=&STD; ZALPHA=(PROBIT(1-ALPHA))*(SIDES=1) + (PROBIT(1-ALPHA/2))*(SIDES=2); ZBETA=PROBIT(POWER); IF MAX_Y2=. THEN DO; MAX_Y2=MIN_Y2+1; INC_Y2=MIN_Y2+2; *NEED 1 EXEC OF DO; END; TY1=Y1; TSTD=STD; TR=R; DO Y2=MIN_Y2 TO MAX_Y2 BY INC_Y2; N=(TSTD**2)*(1+1/TR)*(ZALPHA+ZBETA)**2/(TY1-Y2)**2; DF=ceil(N) + TR*ceil(N) - 2; N1=ceil( n*(df+3)/(df+1) ); *Increase n for t-test 1/9/98; n2=n1*tr; *1/9/98; OUTPUT; END; LABEL Y1="Group 1*Mean (&UNIT)" Y2="Group 2*Mean (&UNIT)" R='N2/N1*Ratio'; FOOTNOTE1 ' '; RUN; PROC PRINT SPLIT='*'; ID y1; VAR Y2 N1 N2; TITLE2 'SAMPLE SIZE REQUIREMENTS FOR COMPARING TWO MEANS'; TITLE3 "Alpha=&alpha, Sides=&sides, STD=&std, Power=&power, Ratio N2/N1=&r "; TITle4"Group 1 true mean=&y1(&unit)"; run; %IF "&MAX_Y2" NE "" %THEN %DO; %IF &PLOT= P %THEN %DO; PROC PLOT NOLEGEND; PLOT N2*Y2/ HAXIS=&MIN_Y2 TO &MAX_Y2 BY &INC_Y2; LABEL N2='Sample Size for Group 2' Y2="True Group 2 mean(&unit)"; %END; %ELSE %IF &PLOT= G %THEN %DO; PROC GPLOT ; PLOT N2*Y2; SYMBOL1 Font= v=none i=join l=1; LABEL N2='Group 2 Sample Size' Y2="True Group 2 mean(&unit)"; run; %END; RUN; %END; %MEND mn2_ss;